package tianqi.controller.upload;
import java.io.File;
import java.io.FileOutputStream;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Iterator;
import java.util.Random;

import javax.servlet.http.HttpServletRequest;

import net.sf.json.JSONObject;
import tianqi.utils.FileUtil;

import org.apache.commons.io.FileUtils;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;

@Controller
public class UploadController {
	
	/**
	 * 如果是ajax来访问返回值void
	 * @throws Exception 
	 * 
	 * 常犯2个错误
	 * 1.忘记修改图片服务器的只读属性，如果没改报403
	 * 2.上传图片的realPath不对，报409
	 */
	@RequestMapping("/uplodeImg0")
	public void uploadPic0(String fileName, HttpServletRequest request, PrintWriter out) throws Exception{
		//强制转换request 转换成复杂类型
		MultipartHttpServletRequest mr = (MultipartHttpServletRequest) request;
		//通过指定的文件名获得指定文件名fileName的文件  页面的名字
		MultipartFile mf = mr.getFile(fileName);
		//获得文件的字节数组，用这个字节数组读取文件
		byte[] bytes = mf.getBytes();
		//定义时间戳作为文件名的一部分吗，为了文件名不重复定义时间戳为文件名
		String tFileName = new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date());
		//定义 Random 随机对象，同样也是为了防止文件名的重复，将"时间戳+随机数"作为文件名
		Random random = new Random();
		//连续加三位 "时间戳和随机数"
		for(int i = 0; i < 3; i++){
			//世时间戳+随机数（是10以内的随机数）
			tFileName = tFileName +  random.nextInt(10);
		}
		//通过转换后的复杂类型的request获得文件的原始文件名，没有加时间戳的文件名
		String oriFileName = mf.getOriginalFilename(); //在电脑硬盘的上的文件名
		//获得原始文件的后缀名
		String suffix = oriFileName.substring(oriFileName.lastIndexOf("."));
		//图片的绝对路径
//		String realPath = EbConstants.IMAGE_PATH + "/upload/"+tFileName + suffix;
		//相对路径
		String relativePath = "upload/"+tFileName + suffix;
		String upath = request.getSession().getServletContext().getRealPath("");
		 //创建一个文件输出流
        FileOutputStream fos = new FileOutputStream(upath+File.separator+relativePath);
        //使用FileOutputStream输出流将缓冲区的数据写入到指定的目录(savePath + "\\" + filename)当中new File()
        fos.write(bytes);
        fos.close();
        upath="F:\\tts9\\workspace\\TianQi\\WebContent";
        FileOutputStream fos2 = new FileOutputStream(upath+File.separator+relativePath);
        fos2.write(bytes);
        
        //关闭输出流
        fos2.close();
		
		
		
		//创建java里面的json对象 
		JSONObject jo = new JSONObject();
		//在json对象中放入键值对
		jo.accumulate("relativePath", relativePath);//类似于map中的put
		String result = jo.toString();
		out.write(result);
	}
	@RequestMapping("/uplodeImg")
	public void uploadPic(String fileName, HttpServletRequest request, PrintWriter out) throws Exception{
		if (fileName==""||fileName==null) {
			//创建java里面的json对象 
			JSONObject jo = new JSONObject();
			//在json对象中放入键值对
			jo.accumulate("relativePath", "error");//类似于map中的put
			String result = jo.toString();
			out.write(result);
		}
		
		
		//强制转换request 转换成复杂类型
		MultipartHttpServletRequest mr = (MultipartHttpServletRequest) request;
		//通过指定的文件名获得指定文件名fileName的文件  页面的名字
		MultipartFile mf = mr.getFile(fileName);
		
		//定义时间戳作为文件名的一部分吗，为了文件名不重复定义时间戳为文件名
		String tFileName = new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date());
		//定义 Random 随机对象，同样也是为了防止文件名的重复，将"时间戳+随机数"作为文件名
		Random random = new Random();
		//连续加三位 "时间戳和随机数"
		for(int i = 0; i < 3; i++){
			//世时间戳+随机数（是10以内的随机数）
			tFileName = tFileName +  random.nextInt(10);
		}
		//通过转换后的复杂类型的request获得文件的原始文件名，没有加时间戳的文件名
		String oriFileName = mf.getOriginalFilename(); //在电脑硬盘的上的文件名
		//获得原始文件的后缀名
		String suffix = oriFileName.substring(oriFileName.lastIndexOf("."));
		//图片的绝对路径
//		String realPath = EbConstants.IMAGE_PATH + "/upload/"+tFileName + suffix;
		//相对路径
		String relativePath = "upload/"+tFileName + suffix;
		String upath = request.getSession().getServletContext().getRealPath("");
		File file1=new File(upath+File.separator+relativePath);
		String upath1="F:\\tts9\\workspace\\TianQi\\WebContent";
	    File file2 = new File(upath1+File.separator+relativePath);
	    mf.transferTo(file1);
	    FileUtils.copyFile(file1, file2);
		
		//创建java里面的json对象 
		JSONObject jo = new JSONObject();
		//在json对象中放入键值对
		jo.accumulate("relativePath", relativePath);//类似于map中的put
		String result = jo.toString();
		out.write(result);
	}
	@RequestMapping("/deleteImg")
	@ResponseBody
	public String uplodeImg(String fileName,HttpServletRequest request){
		fileName=fileName.substring(fileName.lastIndexOf("/")).replace("/", "");
		System.out.println(fileName);
		boolean deleteFile = FileUtil.deleteFile(request.getSession().getServletContext().getRealPath("")+File.separator+"upload"+File.separator+fileName);
		boolean deleteFile2 = FileUtil.deleteFile("F:\\tts9\\workspace\\TianQi\\WebContent"+File.separator+"upload"+File.separator+fileName);
		if (deleteFile && deleteFile2) {
			return "true";
		}
		return "false";
		
		
	}
	
		

}

